home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / as5.zip / AS.H < prev    next >
C/C++ Source or Header  |  1987-12-09  |  6KB  |  125 lines

  1. /*
  2.  *      machine independent definitions and global variables
  3.  */
  4.  
  5. #define YES     1
  6. #define NO      0
  7. #define ERR     (-1)
  8.  
  9. #define MAXBUF  128
  10. #define MAXOP   10      /* longest mnemonic */
  11. #define MAXLAB  16
  12. #define E_LIMIT 32
  13. #define P_LIMIT 64
  14.  
  15. /*      Character Constants     */
  16. #define NEWLINE '\n'
  17. #define TAB     '\t'
  18. #define BLANK   ' '
  19. #define EOS     '\0'
  20.  
  21. /*      Opcode Classes          */
  22. #define INH     0       /* Inherent                     */
  23. #define GEN     1       /* General Addressing           */
  24. #define IMM     2       /* Immediate only               */
  25. #define REL     3       /* Short Relative               */
  26. #define P2REL   4       /* Long Relative                */
  27. #define P1REL   5       /* Long Relative (LBRA and LBSR)*/
  28. #define NOIMM   6       /* General except for Immediate */
  29. #define P2GEN   7       /* Page 2 General               */
  30. #define P3GEN   8       /* Page 3 General               */
  31. #define RTOR    9       /* Register To Register         */
  32. #define INDEXED 10      /* Indexed only                 */
  33. #define RLIST   11      /* Register List                */
  34. #define P2NOIMM 12      /* Page 2 No Immediate          */
  35. #define P2INH   13      /* Page 2 Inherent              */
  36. #define P3INH   14      /* Page 3 Inherent              */
  37. #define GRP2    15      /* Group 2 (Read/Modify/Write)  */
  38. #define LONGIMM 16      /* Immediate mode takes 2 bytes */
  39. #define BTB     17      /* Bit test and branch          */
  40. #define SETCLR  18      /* Bit set or clear             */
  41. #define CPD     19      /* compare d               6811 */
  42. #define XLIMM   20      /* LONGIMM for X           6811 */
  43. #define XNOIMM  21      /* NOIMM for X             6811 */
  44. #define YLIMM   22      /* LONGIMM for Y           6811 */
  45. #define YNOIMM  23      /* NOIMM for Y             6811 */
  46. #define FAKE    24      /* convenience mnemonics   6804 */
  47. #define APOST   25      /* A accum after opcode    6804 */
  48. #define BPM     26      /* branch reg plus/minus   6804 */
  49. #define CLRX    27      /* mvi x,0                 6804 */
  50. #define CLRY    28      /* mvi y,0                 6804 */
  51. #define LDX     29      /* mvi x,expr              6804 */
  52. #define LDY     30      /* mvi y,expr              6804 */
  53. #define MVI     31      /* mvi                     6804 */
  54. #define EXT     32      /* extended                6804 */
  55. #define BIT     33      /* bit manipulation        6301 */
  56. #define SYS     34      /* syscalls (really swi)        */
  57. #define PSEUDO  35      /* Pseudo ops                   */
  58.  
  59. /* global variables */
  60. int     Line_num =0;            /* current line number          */
  61. int     Err_count =0;           /* total number of errors       */
  62. char    Line[MAXBUF] = {0};     /* input line buffer            */
  63. char    Label[MAXLAB] = {0};    /* label on current line        */
  64. char    Op[MAXOP] = {0};        /* opcode mnemonic on current line      */
  65. char    Operand[MAXBUF] = {0};  /* remainder of line after op           */
  66. char    *Optr =0;               /* pointer into current Operand field   */
  67. int     Result =0;              /* result of expression evaluation      */
  68. int     Force_word =0;          /* Result should be a word when set     */
  69. int     Force_byte =0;          /* Result should be a byte when set     */
  70. int     Pc =0;                  /* Program Counter              */
  71. int     Old_pc =0;              /* Program Counter at beginning */
  72.  
  73. int     Last_sym =0;            /* result of last lookup        */
  74.  
  75. int     Pass =0;                /* Current pass #               */
  76. int     N_files =0;             /* Number of files to assemble  */
  77. FILE    *Fd =0;                 /* Current input file structure */
  78. int     Cfn =0;                 /* Current file number 1...n    */
  79. int     Ffn =0;                 /* forward ref file #           */
  80. int     F_ref =0;               /* next line with forward ref   */
  81. char    **Argv =0;              /* pointer to file names        */
  82.  
  83. int     E_total =0;             /* total # bytes for one line   */
  84. int     E_bytes[E_LIMIT] = {0}; /* Emitted held bytes           */
  85. int     E_pc =0;                /* Pc at beginning of collection*/
  86.  
  87. int     Lflag = 0;              /* listing flag 0=nolist, 1=list*/
  88.  
  89. int     P_force = 0;            /* force listing line to include Old_pc */
  90. int     P_total =0;             /* current number of bytes collected    */
  91. int     P_bytes[P_LIMIT] = {0}; /* Bytes collected for listing  */
  92.  
  93. int     Cflag = 0;              /* cycle count flag */
  94. int     Cycles = 0;             /* # of cycles per instruction  */
  95. long    Ctotal = 0;             /* # of cycles seen so far */
  96. int     Sflag = 0;              /* symbol table flag, 0=no symbol */
  97. int     N_page = 0;             /* new page flag */
  98. int     Page_num = 2;           /* page number */
  99. int     CREflag = 0;            /* cross reference table flag */
  100.  
  101. struct link { /* linked list to hold line numbers */
  102.        int L_num; /* line number */
  103.        struct link *next; /* pointer to next node */
  104. };
  105.  
  106. struct nlist { /* basic symbol table entry */
  107.         char    *name;
  108.         int     def;
  109.         struct nlist *Lnext ; /* left node of the tree leaf */
  110.         struct nlist *Rnext; /* right node of the tree leaf */ 
  111.         struct link *L_list; /* pointer to linked list of line numbers */
  112. };
  113.  
  114. struct oper {   /* an entry in the mnemonic table */
  115.         char    *mnemonic;      /* its name */
  116.         char    class;          /* its class */
  117.         int     opcode;         /* its base opcode */
  118.         char    cycles;         /* its base # of cycles */
  119. };
  120.  
  121. struct  nlist *root;            /* root node of the tree */
  122.   
  123. FILE    *Objfil =0;             /* object file's file descriptor*/
  124. char    Obj_name[] = {"             "};
  125.